클라이언트와 서버, 서버와 데이터베이스 사이를 연결하면서 자주 나타나는 문제중 하나가 바로
인코딩 문제입니다. 오늘 알아볼 내용은 바로 PHP 서버에서 데이터베이스에 내용을 저장할때 문자가 깨지는 경우 이를 해결하는 방법을 알아봅니다.
# PHP 서버, 데이터베이스 사이에 문자 깨짐 현상 해결하기
먼저 어디에 문제가 나타나는지 알아야합니다. 이를 확인하기 위해서
인코딩 문제가 발생했다면 발생가능한 위치는 아래와 같이 세 곳을 의심할 수 있습니다.
1. 방문자(클라이언트)에서 보내는 데이터 인코딩 문제
2. PHP등의 서버언어에서 발생하는 문제
3. 서버에서 데이터베이스로 보낼때 발생하는 문제
1번과 2번 모두 UTF-8과 같이 한글 인코딩 설정에 문제가 없더라 하더라도 서버에서 db로 텍스트를 전송할 때 db 인코딩 값에 문제가 있을 수 있습니다. 이 때 해결할 수 있는 방법으로 아래 과정을 참고하세요.
하나. 먼저 데이터베이스의 인코딩 기본값을 확인한다.
; DB를 설정할 경우에 DB에 사용할 인코딩 값을 설정하는데 이 값이 utf-8이 아니라면 아무리 utf-8로 서버에서 전송해도 데이터베이스에 저장되는 값의 인코딩이 잘못될 수 있습니다.
둘. php에서 서버에 전송시 쿼리 인코딩값 설정
; 서버에 전송시 설정하기 인코딩을 설정합니다. 아래의 mysql_query() 함수를 사용합니다.
<?php
header("Content-Type: text/html; charset=utf-8");
$dbc = mysqli_connect("localhost","id","pass","dbname");
if (mysqli_connect_error($dbc)){
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Set up db encoding type
mysql_query("SET session character_set_client = 'UTF8'");
mysql_query("SET session character_set_connection = 'UTF8'");
mysql_query("SET session character_set_results = 'UTF8'");
mysql_query("SET session character_set_server = 'UTF8'");
?>
PHP의 상단에 header를 사용하여 인코딩값을 설정할 수 있습니다. 이 부분이 빠져있는지 역시 매우 중요합니다.